package cn.heyige.backend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.heyige.backend.dto.PromptTemplateDto;
import cn.heyige.backend.entity.PromptTemplateDO;

public interface PromptTemplateService extends IService<PromptTemplateDO> {
    
    /**
     * 获取提示词模板列表
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplates(Page<PromptTemplateDO> page);
    

    /**
     * 根据分类获取提示词模板列表
     * @param category 分类
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplatesByCategory(String category, Page<PromptTemplateDO> page);
    
    /**
     * 根据标签搜索提示词模板列表
     * @param tags 标签
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPromptTemplatesByTags(String tags, Page<PromptTemplateDO> page);
    
    /**
     * 获取用户的提示词模板列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getUserPromptTemplates(Long userId, Page<PromptTemplateDO> page);
    
    /**
     * 获取公共提示词模板列表
     * @param page 分页参数
     * @return 提示词模板列表
     */
    IPage<PromptTemplateDto.TemplateResponse> getPublicPromptTemplates(Page<PromptTemplateDO> page);
    
    /**
     * 获取提示词模板详情
     * @param id 提示词模板ID
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse getPromptTemplate(Long id);
    
    /**
     * 添加提示词模板
     * @param userId 用户ID
     * @param request 添加请求
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse addPromptTemplate(Long userId, PromptTemplateDto.AddRequest request);
    
    /**
     * 更新提示词模板
     * @param id 提示词模板ID
     * @param request 更新请求
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse updatePromptTemplate(Integer id, PromptTemplateDto.UpdateRequest request);
    
    /**
     * 删除提示词模板
     * @param id 提示词模板ID
     * @param userId 用户ID
     */
    void deletePromptTemplate(Long id, Long userId);
    
    /**
     * 复制提示词模板
     * @param id 提示词模板ID
     * @param userId 用户ID
     * @return 提示词模板详情
     */
    PromptTemplateDto.TemplateResponse copyPromptTemplate(Long id, Long userId);

}